﻿#ifndef CTASK_LIST_WIDGET_H
#define CTASK_LIST_WIDGET_H
/********************************************************************************
** @ Date:2024/02/29
** @ Author: HanJiaXin
** @ Description:机器人任务列表界面
** @ Version:1.0.0
** @ ClassName:CTaskListWidget
** @ Fun:
********************************************************************************/

#include <QWidget>
#include <QTimer>
#include <QStandardItemModel>
#include "ui_CTaskListWidget.h"
#include "CRBaseData.h"
#include "CHeader.h"
//子任务信息查询记录类
class CTaskExecRecord
{
public:
	QString m_sTaskGuid;//任务Guid
	QString m_sTaskName;//任务名称
	ETaskType eTaskType;//任务类型(0:周期任务 1:定时任务 2:立即执行任务)
	EPeriodType ePeriodType;//周期类型(0:12h 1:6h 2:4h 3:2h 4:1h 5:0.5h)
	int nTimeType;//任务执行时间类型 如半小时 则一天有48个
	QDateTime m_dtTaskStartTime;//任务开始时间
	QDateTime m_dtTaskEndTime;//任务结束时间
	double m_dTaskStartPower;//任务开始电量
	double m_dTaskEndPower;//任务结束电量
	int m_nExecState;//任务执行状态 0 未执行  1 已执行  2执行中  3任务中止
	QString m_sTemplateGuid;//模版GUID
	int m_nItemNum;//巡检项数量
	int m_nActItemNum;//已执行巡检项数量
	int m_nAlarmItemNum;//报警巡检项数量
	CTaskExecRecord()
	{
		m_sTaskGuid = "";//任务Guid
		m_sTaskName = "";//任务名称
		nTimeType = 0;//任务执行时间类型 如半小时 则一天有48个
		m_dTaskStartPower = 0;//任务开始电量
		m_dTaskEndPower = 0;//任务结束电量
		m_nExecState = 0;//任务执行状态 0 未执行  1 已执行  2执行中  3任务中止
		m_sTemplateGuid = "";//模版GUID
		m_nItemNum = 0;//巡检项数量
		m_nActItemNum = 0;//已执行巡检项数量
		m_nAlarmItemNum = 0;//报警巡检项数量
	}

};

class CTaskListWidget : public QWidget
{
	Q_OBJECT

public:
	CTaskListWidget(QString sSceneGuid, CRBaseData* pBasicData,QWidget *parent = nullptr);
	~CTaskListWidget();
	void loadTaskExec();
	void refreshList();//刷新列表
	QTimer* m_pTimer;

private:
	void addTimedTask(QMap<QDateTime, CTaskExecRecord> &mapSubTaskInfoSearchRecord, QDateTime dTimingTime, QString sTaskGuid, QString sTaskName, QString sTemplateFixedId);//添加定时任务
	void addCycleTask(QMap<QDateTime, CTaskExecRecord> &mapSubTaskInfoSearchRecord, int nTimeType, QString sTaskGuid, QString sTaskName, QString sTemplateFixedId);//添加周期任务
	void addRunNowTask(QMap<QDateTime, CTaskExecRecord> &mapSubTaskInfoSearchRecord, QDateTime dExecTime, QString sTaskGuid, QString sTaskName, QString sTemplateFixedId);//添加立即执行任务
	bool judgeIsSameDate(const QDateTime dDateTime);   //判断是否是当天日期
	bool judgeIsOutTime(const QDateTime dActTime);     //判断是否过期

private:
	void setStyleSheetFile();	//设置界面样式表
	void initTableView();       //初始化tableview界面
	void initData();			//初始化数据

public slots:
	void slotDataRefresh();//定时器刷新

private:
	Ui::CTaskListWidgetClass ui;
	QString m_sGuid;
	CRBaseData* m_pBasicData;
	QMap<int, QString> m_mapExecStatus;//任务执行状态
	QStandardItemModel* m_pModel; //表格数据集
	QMap<int, QString> m_mapTimeType;//时间类型
	QMap<QDateTime, CTaskExecRecord> m_mapTaskExecRecord;//子任务信息查询记录Map
};
#endif // 